﻿// Learn more about F# at http://fsharp.net
module Ast
type id = string

type typ = 
      | Any
      | Boolean
      | Real
      | Integer
      | Natural
      | String
      | Connection1 
      | Connection of typ
      | Connection_id of id
      | TypeList of typ * typ
      | TypeList1 of id * typ
      | TypeList2 of typ * id
      | TypeList3 of id * id
      | Tuple of typ
      | View of typ
      | Union of typ
      | Variant of typ
      | Quote of id
      | Location of typ
      | Location_id of id
      | Set of typ
      | Set_id of id
      | Bag of typ
      | Bag_id of id
      | In of typ
      | Out of typ
      | Inout of typ
      | Sequence of typ
      | Sequence_id of id
      | DefineList of typ * typ
      | Define1 of id * typ
      | Define2 of id * id

      

type proc =
      | Inert
      | FirstThen of proc * proc
      | Recv of id * id
      | RecvVoid of id
      | Send of id * id
      | SendVoid of id
      | Send1 of id * id * typ
      | Recv1 of id * id * typ
      | Send2 of id * proc
      | Recv2 of id * proc
      | Send3 of id * id * id
      | Recv3 of id * id * id
      | Repeat of proc
      | Behaviour of proc
      | Architecture of id * proc
      | Component of id * proc
      | Connector of id * proc
      | NameBehav of id * proc
      | Abstrct of id * proc
      | Abstrct1 of id * typ *  proc
      | Recur of proc
      | Par of proc * proc
      | Compose of proc
      | Decompose of proc
      | Precedences of id * id
      | BehavPrecedences of proc * proc
      | BehavWhere of proc * proc
      | And of proc * proc
      | Or of proc * proc
      | Choose of proc
      | Where of proc
      | Unifies of id * id
      | Unifies1 of proc * proc
      | Unifies2 of proc * id
      | Unifies3 of id * proc
      | Relays of id * id
      | Relays1 of proc * proc
      | Relays2 of proc * id
      | Relays3 of id * proc
      | Func of id * typ * id * proc
      | Func1 of id * typ * typ * proc
      | Protocol of proc
      | ProtocolOr of proc * proc
      | ProtoParen of proc
      | Assuming of proc
      | DefineVar of typ
      | Function_Param0 of id * id
      | Function_Param1 of id * id * id
      | Function_Param2 of id * id * proc
      | BehavRecu
      | BehavRecu1 of id
      | BehavRecu2 of proc
      | Comma of proc * proc
      | Unobservable
      | ReAssign of id * proc
      | Assign of id * proc
      | Assign1 of id * proc
      | Assign2 of id * proc
      | Assign3 of id * id * id
      | Assignment of id * id
      | Define of id * typ
      | Free of id
      | IfDo of proc * proc
      | IfDo1 of id * proc
      | IfDo2 of id * id * proc
      | IfThen of proc * proc
      | IfThen1 of id * proc
      | IfThenElse of proc * proc * proc
      | IfThenElse1 of id * proc * proc
      | Do of typ * proc
      | Do1 of id * proc
      | DefaultDo of proc
      | Equals of id * id
      | Equals1 of id * proc
      | NEquals of id * id
      | NEquals1 of id * proc
      | Less of id * id
      | More of id * id
      | EqualLess of id * id
      | EqualMore of id * id
      | Less1 of id * proc
      | More1 of id * proc
      | EqualLess1 of id * proc
      | EqualMore1 of id * proc
      | Equals_ of proc * id
      | Equals1_ of proc * proc
      | NEquals_ of proc * id
      | NEquals1_ of proc * proc
      | Less_ of proc * id
      | More_ of proc * id
      | EqualLess_ of proc * id
      | EqualMore_ of proc * id
      | Less1_ of proc * proc
      | More1_ of proc * proc
      | EqualLess1_ of proc * proc
      | EqualMore1_ of proc * proc
      | Add of id * id
      | Sub of id * id
      | Multi of id * id
      | Div of id * id
      | Add1 of id * proc
      | Sub1 of id * proc
      | Multi1 of id * proc
      | Div1 of id * proc
      | NewBehav of id
      | NewBehav1 of id * id
      | NewBehav2 of id * proc
      | Param of id * id
      | Param1 of id * proc
      | Param2 of proc * id
      | Param3 of proc * proc
      | ParamList of proc * id
      | ParamList1 of proc * proc
      | NewTuple of proc
      | Project of id * id
      | Project1 of id * proc
      | Case of proc
      | Alias of id * typ
      | Alias_ of id * id
      | RecurType of proc
      | Iterate of id * id * typ * id * proc * proc * id
      | Iterate1 of id * id * typ * proc
      | Int_val of int32
      | Float_val of float
      | Natural_val of id
      | Bool_val of bool
      | Any_val1 of bool
      | Id_val1 of id * bool
      | String_val of id
      | Id_val of id
      | Tuple_val of proc
      | View_val of proc
      | Union_val of proc
      | Variant_val of proc
      | Location_val of proc
      | Connection_val of typ
      | Set_val of proc
      | Seq_val_ of id
      | Bag_val of proc
      | Seq_val of proc
      | Quote_val of id
      | In_val of proc
      | Out_val of proc
      | Inout_val of proc
      | ValList of proc * proc
      | OperatorList of proc * proc
      | New of typ
      | Any_val
      | Connection_ of id * id
      | Connection__ of id * typ
      | Port of id * proc
      | MemberOf of id * id
      | MemberOf1 of proc * id
      | ValueOf of id
  

     
